Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java-Syntax</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Java-Syntax"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/mediawiki.page.gallery.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java-Syntax rootpage-Java-Syntax skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java-Syntax</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Die <a href="Syntax" title="Syntax">Syntax</a> der Programmiersprache <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a> ist in der <a href="Java_Language_Specification" title="Java Language Specification">Java Language Specification</a> definiert, ebenso wie die <a href="Semantik" title="Semantik">Semantik</a> von Java.
</p><p>Dieser Artikel gibt einen Überblick über die Java-Syntax und stellt einige ihrer Besonderheiten heraus. Details sind in den <a href="Java_Language_Specification" title="Java Language Specification">Java-Sprachspezifikation von Sun Microsystems</a> aufgeführt.
</p>

<div class="mw-heading mw-heading2"><h2 id="Terminologie">Terminologie</h2></div>
<p>Da Java eine Programmiersprache ist, zu deren Beschreibung überwiegend englischsprachige Begriffe benutzt werden, aber dennoch in der Literatur ebenfalls eingedeutschte Übersetzungen bestimmter Bestandteile verwendet werden, soll an dieser Stelle über die <a href="Disambiguierung" title="Disambiguierung">Mehrdeutigkeit</a> aufgeklärt und ebenfalls die von diesem Artikel verwendeten Ausdrücke festgelegt werden, damit eine Verwechslung ausgeschlossen werden kann. Im Folgenden werden die in diesem Artikel verwendeten Begriffe und ihre englischen oder deutschen Entsprechungen aufgeführt.
</p>
<dl><dt>Ausdruck</dt>
<dd>(engl. <i>Expression</i>) Unter einem <a href="Ausdruck_(Programmierung)" title="Ausdruck (Programmierung)">Ausdruck</a> wird ein beliebig komplexes Sprachkonstrukt verstanden, dessen Auswertung einen einzigen wohl definierten Wert ergibt. Im einfachsten Fall ist ein Ausdruck eine Konstante, wie z.&nbsp;B. das Schlüsselwort <i>true</i> oder auch eine Zahl (z.&nbsp;B. <i>1</i> oder <i>0x7fff</i>). Komplexere Ausdrücke sind Vergleiche oder Berechnungen mit mehreren Variablen und Konstanten. Innerhalb der Grammatikbeschreibungen wird hier häufig noch nach verschiedenen Arten von Ausdrücken (z.&nbsp;B. numerisch, literal etc.) unterschieden, was hier nicht der Fall sein soll.</dd>
<dt>Anweisung</dt>
<dd>(engl. <i>Statement</i>, <i>Instruction</i> oder <i>Command</i>; auch <i>Befehl</i> genannt) Eine <a href="Anweisung_(Programmierung)" title="Anweisung (Programmierung)">Anweisung</a> bezeichnet in Java, wie auch in vielen anderen imperativen Programmiersprachen, eine einzelne Vorschrift, die im Rahmen der Abarbeitung des Programms auszuführen ist. Dazu zählen die Deklaration von Variablen, durch Semikolon abgeschlossene Ausdrücke, Kontrollstrukturen, Anweisungsblöcke, Sprunganweisungen, Synchronisierungsblöcke, Rückgaben von Werten und das Auslösen von Ausnahmen.</dd>
<dt>Anweisungsblock</dt>
<dd>(engl. <i>Statement Block</i>) Ein Anweisungsblock dient dazu, mehrere Anweisungen zu gruppieren. Dadurch können mehrere Anweisungen wie eine einzelne Anweisung interpretiert werden, was von einigen Sprachkonstrukten vorausgesetzt wird – wie etwa von den Kontrollstrukturen.</dd></dl>
<div class="mw-heading mw-heading2"><h2 id="Lexikalische_Struktur">Lexikalische Struktur</h2></div>
<p>Java-Programme werden in <a href="Unicode" title="Unicode">Unicode</a> geschrieben.
Im Gegensatz zu anderen Sprachen können Bezeichner (englisch <i>Identifier</i>) von Klassen, Methoden, Variablen usw. nicht nur die Buchstaben des lateinischen Alphabets und Ziffern enthalten, sondern auch Zeichen aus anderen Alphabeten, wie z.&nbsp;B. deutsche Umlaute oder chinesische Schriftzeichen.
</p><p>Sämtliche Schlüsselwörter in Java werden klein geschrieben, z.&nbsp;B. „<code>class</code>“ oder „<code>if</code>“.
</p><p>Buchstabensymbole (englisch <i>literals</i>) sind in Java die kleinstmöglichen Ausdrücke für Zahlen, einzelne Zeichen, Zeichenketten (<i>Strings</i>), logische Werte (<code>true</code> oder <code>false</code>) und das spezielle Wort <code>null</code>.
</p><p>Trennzeichen (englisch <i>separators</i>) sind verschiedene Arten von Klammern sowie Komma, Punkt und Semikolon.
</p><p>Java kennt die in Programmiersprachen üblichen <a href="Logischer_Operator" title="Logischer Operator">logischen</a>, <a href="Vergleichsoperator" title="Vergleichsoperator">Vergleichs-</a> und <a href="Operator_(Mathematik)" title="Operator (Mathematik)">mathematischen Operatoren</a>. Die Syntax orientiert sich dabei an der <a href="C%2B%2B" title="C++">Programmiersprache C++</a>. So dient zum Beispiel das einfache Gleichheitszeichen „<code>=</code>“ als Zuweisungsoperator, während für Vergleiche das doppelte Gleichheitszeichen „<code>==</code>“ verwendet wird.
</p><p>Leerzeichen, Zeilenenden und Kommentare können an beliebigen Stellen zwischen den Bezeichnern, Schlüsselwörtern, Buchstabensymbolen, Trennzeichen und Operatoren eingefügt werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Syntax">Syntax</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Datentypen">Datentypen</h3></div>
<p>Java kennt zwei <a href="Datentyp" title="Datentyp">Datentyparten</a>: primitiver Datentyp und <a href="Referenz_(Programmierung)" title="Referenz (Programmierung)">Referenzen</a> auf Objekte. Die primitiven Datentypen sind ein Grund, weshalb Java strenggenommen keine reine objektorientierte Sprache ist.
</p>
<div class="mw-heading mw-heading4"><h4 id="Primitive_Datentypen">Primitive Datentypen</h4></div>
<p>Es gibt acht primitive Datentypen. Sie haben unterschiedliche Größen und Eigenschaften und werden zum Berechnen und Speichern diskreter Zahlenwerte benutzt. Alle diese Datentypen verfügen über eine fest definierte Größe, die für alle Plattformen gleich ist. Für jeden Typ existiert eine entsprechende <a href="Adapter_(Entwurfsmuster)" title="Adapter (Entwurfsmuster)">Wrapper</a>-Klasse, um auch diese als echte Objekte behandeln zu können.
</p>
<table class="wikitable toptextcells">

<tbody><tr>
<th>Datentyp
</th>
<th>Größe<style data-mw-deduplicate="TemplateStyles:r261937660">
/* start https://de.wikipedia.org/ */


.mw-parser-output .fussnoten-marke{font-style:normal;font-variant:normal;font-weight:normal;unicode-bidi:isolate;white-space:nowrap}.mw-parser-output sup.fussnoten-marke{font-size:0.75rem}.mw-parser-output .fussnoten-etui sup{margin-left:-0.15rem}.mw-parser-output span.fussnoten-inhalt{padding-left:0.1rem}.mw-parser-output span.fussnoten-inhalt+span.fussnoten-inhalt{padding-left:0.15rem}.mw-parser-output .fussnoten-block{margin-bottom:0.1rem}.mw-parser-output div.fussnoten-inhalt{display:inline-block;padding-left:0.8rem;text-indent:-0.8rem}.mw-parser-output div.fussnoten-inhalt p,.mw-parser-output div.fussnoten-inhalt dl,.mw-parser-output div.fussnoten-inhalt ol,.mw-parser-output div.fussnoten-inhalt ul{text-indent:0}.mw-parser-output div.fussnoten-inhalt.fussnoten-floatfix{display:block}.mw-parser-output .fussnoten-box{margin-top:0.5rem;padding-left:0.8rem}.mw-parser-output .fussnoten-box,.mw-parser-output div.fussnoten-inhalt{font-size:94%}.mw-parser-output .fussnoten-box div.fussnoten-inhalt,.mw-parser-output span.fussnoten-inhalt,.mw-parser-output .fussnoten-inhalt .reference-text{font-size:inherit}.mw-parser-output .fussnoten-inhalt .reference-text{display:inline}.mw-parser-output .fussnoten-linie{display:inline-block;position:relative;top:-1em;border-top:solid 1px #808080;width:8rem}.mw-parser-output .fussnoten-linie+p,.mw-parser-output .fussnoten-linie+dl,.mw-parser-output .fussnoten-linie+ol,.mw-parser-output .fussnoten-linie+ul,.mw-parser-output .fussnoten-linie+link+div{margin-top:-1em}.mw-parser-output .annotationpair-m:target .fussnoten-marke,.mw-parser-output .fussnoten-inhalt:target{background-color:var(--background-color-progressive-subtle,#f1f4fd);box-shadow:0 0 0 0.25em var(--background-color-progressive-subtle,#f1f4fd)}.mw-parser-output .annotationpair-m:target .fussnoten-marke,.mw-parser-output .fussnoten-inhalt:target .fussnoten-marke{font-weight:bold}


/* end https://de.wikipedia.org/ */
</style>&nbsp;<span class="fussnoten-etui reference"><sup class="fussnoten-marke" data-annotationpair-m="(a)">(a)</sup></span>
</th>
<th>Wrapper-Klasse
</th>
<th>Wertebereich
</th>
<th>Beschreibung
</th></tr>
<tr>
<td>boolean</td>
<td style="text-align:right">1 Bit</td>
<td>java.lang.Boolean
</td>
<td>true / false
</td>
<td><a href="Boolesche_Algebra" title="Boolesche Algebra">Boolescher Wahrheitswert</a>
</td></tr>
<tr>
<td>char</td>
<td style="text-align:right">16 Bit</td>
<td>java.lang.Character
</td>
<td>U+0000 … U+FFFF
</td>
<td><a href="Unicode" title="Unicode">Unicode</a>-Zeichen (= Symbol) (z.&nbsp;B. <code>'A'</code> oder <code>'\uC3A4'</code>)
</td></tr>
<tr>
<td>byte</td>
<td style="text-align:right">8 Bit</td>
<td>java.lang.Byte
</td>
<td>−128 … +127
</td>
<td><a href="Zweierkomplement" title="Zweierkomplement">Zweierkomplement</a>-Wert
</td></tr>
<tr>
<td>short</td>
<td style="text-align:right">16 Bit</td>
<td>java.lang.Short
</td>
<td>−32.768 … +32.767
</td>
<td>Zweierkomplement-Wert
</td></tr>
<tr>
<td>int</td>
<td style="text-align:right">32 Bit</td>
<td>java.lang.Integer
</td>
<td>−2.147.483.648 … +2.147.483.647
</td>
<td>Zweierkomplement-Wert
</td></tr>
<tr>
<td>long</td>
<td style="text-align:right">64 Bit</td>
<td>java.lang.Long
</td>
<td>−9.223.372.036.854.775.808 …<br>+9.223.372.036.854.775.807
</td>
<td>Zweierkomplement-Wert
</td></tr>
<tr>
<td>float</td>
<td style="text-align:right">32 Bit</td>
<td>java.lang.Float
</td>
<td>±1,4E−45 … ±3,4E+38
</td>
<td><a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahl</a> (<a href="IEEE_754" title="IEEE 754">IEEE 754</a>)
</td></tr>
<tr>
<td>double</td>
<td style="text-align:right">64 Bit</td>
<td>java.lang.Double
</td>
<td>±4,9E−324 … ±1,7E+308
</td>
<td>Gleitkommazahl doppelter Genauigkeit (IEEE 754)
</td></tr></tbody></table>
<div class="fussnoten-box">
<div class="fussnoten-linie" aria-hidden="true" role="presentation"></div>
<div class="fussnoten-block"><div class="fussnoten-inhalt references"><sup class="fussnoten-marke mw-cite-backlink" data-annotationpair-a="(a)">(a)</sup>&nbsp;<div class="reference-text">Gibt die Größe des Wertebereichs an. Der tatsächliche Speicherbedarf ist abhängig von Plattform und Implementierung der Java Virtual Machine.</div></div></div>
</div>
<div class="mw-heading mw-heading5"><h5 id="Typumwandlung">Typumwandlung</h5></div>
<p>Die Hierarchie für das <a href="Typumwandlung" title="Typumwandlung">Umwandeln</a> (<i>type casting</i>) der primitiven Datentypen lässt sich aus der oberen Tabelle erahnen.
Die numerischen Datentypen lassen sich verlustfrei in den nächstgrößeren Datentyp umrechnen, jedoch nicht umgekehrt.
So kann ein „<code>int</code>“ implizit, also ohne speziellen Operator, in ein „<code>long</code>“ umgewandelt werden, jedoch nicht umgekehrt.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12345</span><span class="p">;</span>
<span class="kt">long</span><span class="w"> </span><span class="n">l</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="p">;</span>
</pre></div>
<p>Um jedoch in umgekehrter Richtung beispielsweise einen „<code>long</code>“ in ein „<code>int</code>“ umzuwandeln, muss der Typumwandlungsoperator verwendet werden. Dabei können auch Informationen verloren gehen.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">long</span><span class="w"> </span><span class="n">l</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">12345678901L</span><span class="p">;</span>
<span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="n">l</span><span class="p">;</span>
</pre></div>
<p>Hier tritt ein Informationsverlust auf: „<code>i</code>“ hat nach der Zuweisung den Wert −539222987, weil die höherwertigen Bytes abgeschnitten werden.
</p><p>Der primitive Datentyp „<code>boolean</code>“ kann in keinen anderen Datentyp umgewandelt werden. Zeichen vom Typ „<code>char</code>“ können implizit in jeden ganzzahligen Typ ab „<code>int</code>“ umgewandelt werden. Dies hängt insbesondere damit zusammen, dass „<code>char</code>“ den einzigen in Java bekannten vorzeichenlosen Datentyp darstellt. Damit ist eine verlustfreie Konvertierung nach „<code>short</code>“ ab dem Wert 32768 nicht mehr möglich.
</p>
<div class="mw-heading mw-heading4"><h4 id="Referenzen">Referenzen</h4></div>
<p>Alle Objekte und <a href="Feld_(Java)" class="mw-redirect" title="Feld (Java)">Felder</a> liegen im <a href="Dynamischer_Speicher" title="Dynamischer Speicher">Heap</a>-Speicher und werden deshalb über eine Adresse referenziert. Der Objektzugriff in Java ist über <a href="Referenz_(Programmierung)" title="Referenz (Programmierung)">Referenzen</a> implementiert, welche den aus C/C++ bekannten Zeigern ähneln.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> Die Sprachdefinition (Java Language Specification) bezeichnet sie als „Reference Values“, um deutlich zu machen, dass sie durch <a href="Wertparameter" title="Wertparameter">Call-by-Value</a> übergeben werden.<sup id="cite_ref-sun-reference-value_2-0" class="reference"><a href="#cite_note-sun-reference-value-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> In Java gibt es keine direkte Möglichkeit, die Speicheradresse einer Referenz anzuzeigen oder diese zu modifizieren, wodurch sogenannte Zeigerarithmetik in Java ausgeschlossen wird.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">Object</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Object</span><span class="p">();</span><span class="w"> </span><span class="c1">// a referenziert das gerade neu erstellte Objekt</span>
<span class="n">Object</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="p">;</span><span class="w"> </span><span class="c1">// b referenziert dasselbe Objekt wie a</span>
<span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span><span class="w"> </span><span class="c1">// a referenziert kein Objekt mehr, enthält somit die reservierte Adresse null.</span>
</pre></div>
<p>Hierbei gilt es festzuhalten, dass auch Zeichenketten (Klasse <code>String</code>) Referenztypen darstellen und daher inhaltlich stets über die Methode <code>equals()</code> zu vergleichen sind („<code>==</code>“ kontrolliert nur die Referenzen, d.&nbsp;h. Speicheradressen). Dies steht im Gegensatz zu Programmiersprachen wie C++ und <a href="C-Sharp" title="C-Sharp">C#</a>, welche die vollständige Operatorenüberladung unterstützen und bei <code>"hallo"=="hallo"</code> Inhaltsvergleiche durchführen.
</p>
<div class="mw-heading mw-heading3"><h3 id="Reservierte_Wörter"><span id="Reservierte_W.C3.B6rter"></span>Reservierte Wörter</h3></div>
<p><code>const</code> und <code><a href="Sprunganweisung" title="Sprunganweisung">goto</a></code> sind zwar reserviert, aber ohne Funktion, also keine Schlüsselwörter im eigentlichen Sinn. Sie dienen lediglich dem Compiler zur Ausgabe sinnvoller Fehlermeldungen für Umsteiger von C++ oder C.
</p><p><code>true</code>, <code>false</code> und <code>null</code> sind Literale, jedoch ebenfalls eigentlich keine Schlüsselwörter im engeren Sinn.
</p><p>Mit <code>assert</code> werden <a href="Assertion_(Informatik)" title="Assertion (Informatik)">Assertions</a> realisiert.
</p><p><code>private</code>, <code>protected</code> und <code>public</code> sind <a href="Zugriffsmodifikator" title="Zugriffsmodifikator">Zugriffsmodifikatoren</a> (<i>access modifier</i>):
</p>
<table class="wikitable" style="text-align:center;">

<tbody><tr>
<th></th>
<th>Die Klasse selbst</th>
<th>Paket-Klassen/<br>innere Klassen</th>
<th>Unterklassen</th>
<th>Sonstige<br>Klassen
</th></tr>
<tr>
<th style="text-align:left;">private
</th>
<td>Ja</td>
<td>Nein<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>A 1<span class="cite-bracket">]</span></a></sup></td>
<td>Nein</td>
<td>Nein
</td></tr>
<tr>
<td style="text-align:left"><i>(ohne)</i><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>A 2<span class="cite-bracket">]</span></a></sup>
</td>
<td>Ja</td>
<td>Ja</td>
<td>Nein</td>
<td>Nein
</td></tr>
<tr>
<th style="text-align:left">protected
</th>
<td>Ja</td>
<td>Ja</td>
<td>Ja</td>
<td>Nein
</td></tr>
<tr>
<th style="text-align:left">public
</th>
<td>Ja</td>
<td>Ja</td>
<td>Ja</td>
<td>Ja
</td></tr></tbody></table>
<ol class="references" data-mw-group="A">
<li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text">Um inneren Klassen den Zugriff auf private Methoden und Eigenschaften dennoch zu ermöglichen,
werden vom Compiler statische, paket-private Methoden erstellt, die den Aufruf, das Setzen oder das Auslesen emulieren. Diese Methoden tragen den Namen <code>access$xxx</code>, wobei <code>xxx</code> für eine fortlaufende Nummer steht.</span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text">Häufig auch als „package private“ bezeichnet, obwohl es diesen Zugriffsmodifikator nicht gibt.</span>
</li>
</ol>
<p>Private Methoden sind von der Polymorphie ausgenommen, d.&nbsp;h. die Definition einer Methode derselben Signatur in einer Subklasse gilt nicht als <i>Überschreiben</i> (sondern als <i>Verbergen</i>).
</p><p><code>static</code> kennzeichnet Implementierungen, die ohne eine Objektreferenz verwendbar sind. Das Schlüsselwort wird bei der Deklaration von Feldern, Methoden und inneren Klassen verwendet. Felder, Methoden und Klassen, die mittels <code>static</code> gekennzeichnet sind, werden im Kontext der <a href="Klasse_(Programmierung)" class="mw-redirect" title="Klasse (Programmierung)">Klasse</a> verwendbar und sind an kein <a href="Objekt_(Programmierung)" title="Objekt (Programmierung)">Objekt</a> gekoppelt.
</p><p><code>abstract</code> kann vor Klassen und <a href="Methode_(Programmierung)" title="Methode (Programmierung)">Methoden</a> stehen. Abstrakte Methoden verfügen über keine Implementierung und müssen in abgeleiteten Klassen überschrieben werden. Klassen, die abstrakte Methoden enthalten, müssen selbst als abstrakt deklariert werden. Abstrakte Klassen können nicht instanziiert werden, auch wenn sie vollständig implementiert sind, wie z.&nbsp;B. im Fall der EventListener-Adapterklassen des <a href="Swing_(Java)" title="Swing (Java)">Swing</a>-Frameworks.
</p><p><code>final</code> kann vor <a href="Variable_(Programmierung)" title="Variable (Programmierung)">Variablen</a>, Feldern, Methoden und Klassen stehen und erzwingt Unveränderlichkeit. Bei Variablen und Membervariablen ihre Konstanz, bei Methoden die Unmöglichkeit, sie in abgeleiteten Klassen zu überschreiben und schließlich bei Klassen, dass von ihnen keine weiteren Ableitungen erfolgen können. Einer finalen Variable wird einmalig ein Wert zugewiesen, der nachträglich nicht mehr verändert werden kann. Eine finale Variable muss nicht in der Deklaration initialisiert werden, sondern kann auch erst in folgenden, alternativen Anweisungen einmalig belegt werden:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">calcFinal</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="p">;</span><span class="w"> </span><span class="c1">// hier findet noch keine Zuweisung statt</span>
<span class="w"> </span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mi">1</span><span class="p">:</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="mi">2</span><span class="p">:</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="p">:</span>
<span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
<span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Zugriffe auf finale Variablen, deren Wert dem Compiler bekannt ist, dürfen vom Compiler durch den Wert der Variable ersetzt werden. Aufrufe finaler Methoden dürfen vom Compiler durch eingebundenen Code (Inlining) ersetzt werden. Private Methoden sind automatisch final.
</p><p><code>native</code> kann nur vor Methoden stehen und bedeutet, dass die Implementierung der betreffenden Methode nicht in Java, sondern einer anderen Programmiersprache geschrieben wurde, und von der virtuellen Maschine über eine <a href="Laufzeitbibliothek" title="Laufzeitbibliothek">Laufzeitbibliothek</a> eingebunden werden muss.
</p><p><code>strictfp</code> kennzeichnet Klassen und Methoden, deren enthaltene Gleitkommaoperationen streng nach <a href="IEEE_754" title="IEEE 754">IEEE 754</a> ablaufen müssen.
</p><p><code>package</code> deklariert die Paketzugehörigkeit eines komplexen Datentyps. Die Namensgebung eines Pakets sollte eindeutig sein und orientiert sich meist an der <a href="Domain_(Internet)" title="Domain (Internet)">Internet-Domain</a> des Eigentümers oder Erstellers.
</p><p><code>import</code> importiert Symbole (vorher nur Typen, ab Java 5 auch statische Member von Klassen), so dass sie ohne voll qualifizierten Namen verwendet werden können. Der Import kann hierbei über das Wildcard <code>*</code> auf komplette Pakete ausgedehnt werden.
</p><p><code>boolean</code>, <code>char</code>, <code>byte</code>, <code>short</code>, <code>int</code>, <code>long</code>, <code>float</code> und <code>double</code> sind Typen. <code>void</code> ist der Nichtstyp, notwendig, um Methoden ohne Rückgabewerte zu kennzeichnen. Für die primitiven Typen: siehe oben.
</p><p><code>class</code>, <code>interface</code>, <code>enum</code> und <code>@interface</code> dienen zur Deklaration eigener Typen: Klassen, Interfaces (Schnittstellen für Klassen), Enums (<a href="Aufz%C3%A4hlungstyp" title="Aufzählungstyp">Aufzählungstyp</a> für typsichere Aufzählung, englisch <i>typesafe enumeration</i>) und Annotations für Metadaten. <code>enum</code> und <code>@interface</code> sind mit Java 5 in die Sprache aufgenommen worden.
</p><p><code>try</code>, <code>catch</code>, <code>finally</code>, <code>throw</code>, <code>throws</code> beziehen sich auf die <a href="Ausnahmebehandlung" title="Ausnahmebehandlung">Ausnahmebehandlung</a> (englisch <i>exception handling</i>). Mit <code>throw</code> wird eine Ausnahme ausgelöst. Alle eventuell ausgelösten Ausnahmen einer Methode, die nicht von <code>RuntimeException</code> oder <code>Error</code> abstammen, müssen mit <code>throws</code> in der Deklaration der Methode angegeben werden. Es handelt sich also um so genannte <i>checked exceptions</i>. <code>try</code> umschließt einen Block, in dem eventuell eine Ausnahme auftreten könnte. <code>catch</code> fängt nach einem <code>try</code>-Block die dort aufgetretene Ausnahme ab, <code>finally</code> wird an einen <code>try</code>- oder <code>catch</code>-Block für Aufräumarbeiten wie das Schließen von Dateien angehängt.
</p><p><code>extends</code> und <code>implements</code> dienen der Vererbung: <code>extends</code> der genetischen Erweiterungsvererbung von Klasse zu Klasse oder Interface zu Interface und <code>implements</code> der Implementierungsvererbung von Interface zu Klasse. Außerdem wird <code>extends</code> bei Generics für Typerweiterung verwendet.
</p><p><code>super</code> und <code>this</code> beziehen sich im Objekt-Kontext auf das aktuelle Objekt in seinem tatsächlichen Morph (<code>this</code>) oder im Morph der Superklasse (<code>super</code>). <code>this</code> wird verwendet, um in Konstruktoren überladene Konstruktoren aufzurufen und um in Membern auf verdeckte Member äußerer Strukturen zu verweisen. <code>super</code> wird in Konstruktoren zum Aufruf des Superklassenkonstruktors und in überschreibenden Methoden zum Aufruf der überschriebenen Methode verwendet. Außerdem wird <code>super</code> bei Generics für Typeingrenzung verwendet.
</p><p><code>new</code> reserviert Speicher für neue Objekte (inklusive Arrays) auf dem <a href="Dynamischer_Speicher" title="Dynamischer Speicher">Heap</a>.
</p><p><code>if</code>, <code>else</code>, <code>switch</code>, <code>case</code>, <code>default</code>, <code>while</code>, <code>do</code>, <code>for</code>, <code>break</code>, <code>continue</code> dienen der Bedingungsprüfung und Schleifensteuerung und bedienen sich einer imperativen Syntax.
</p><p><code>return</code> liefert Werte aus einer Methode an die aufrufende Methode zurück.
</p><p><code>volatile</code> ist ein Modifikator für nicht-lokale Variablen und verbietet dem <a href="Just-in-time-Kompilierung" title="Just-in-time-Kompilierung">JIT-Compiler</a> Registeroptimierungen auf diese Variable, weil mehrere Threads sie gleichzeitig verwenden könnten (insbesondere im Kontext nativer Methoden).
</p><p><code>synchronized</code> kennzeichnet einen <a href="Kritischer_Abschnitt" title="Kritischer Abschnitt">kritischen Abschnitt</a> im Quelltext, der nur von einem <a href="Thread_(Informatik)" title="Thread (Informatik)">Thread</a> gleichzeitig ausgeführt werden darf. Ein <a href="Monitor_(Informatik)" title="Monitor (Informatik)">Monitor</a> sperrt den Abschnitt, sobald ihn ein Thread betritt. Versucht ein anderer Thread den gesperrten Abschnitt zu betreten, blockiert dieser Thread so lange, bis der Monitor den Abschnitt freigibt. Jedes beliebige Java-Objekt kann als Monitor verwendet werden. Ist eine Methode mit <code>synchronized</code> gekennzeichnet, wird automatisch das Objekt bzw. bei statischen Methoden das Klassenobjekt als Monitor verwendet.
</p><p><code>transient</code> kennzeichnet nicht-persistente Variablen, die nicht serialisiert werden dürfen.
</p><p><code>instanceof</code> ist ein Java-Operator, der prüft, ob ein Objekt Exemplar eines angegebenen Typs oder Subtyps ist.
</p>
<div class="mw-heading mw-heading3"><h3 id="Pakete,_Namen,_Klassen,_Schnittstellen"><span id="Pakete.2C_Namen.2C_Klassen.2C_Schnittstellen"></span>Pakete, Namen, Klassen, Schnittstellen</h3></div>
<p>Ein Java-Paket (englisch <i>package</i>) enthält mehrere Klassen, Schnittstellen und Ausnahmen und bildet einen eigenen <a href="Namensraum" title="Namensraum">Namensraum</a>.
</p><p>Java-Quelltext ist auf mehrere Übersetzungseinheiten (englisch <i>compilation units</i>) aufgeteilt, von denen jede in einer eigenen Datei abgelegt ist. Jede einzelne Übersetzungseinheit definiert als erstes das Paket, dem sie angehört, importiert dann mehrere Klassen oder Schnittstellen aus anderen Paketen, und definiert schließlich eine oder mehrere Klassen und Schnittstellen.
</p><p>Java unterscheidet einfache Namen, die nur aus einem Bezeichner bestehen, und vollqualifizierte Namen, die aus einer Reihe von Bezeichnern bestehen, die durch Punkte getrennt sind. Die einfachen Namen sind nur ein Hilfsmittel, das dem Programmierer Tipparbeit ersparen und die Lesbarkeit des Programms erhöhen soll. Der Compiler übersetzt sie immer in vollqualifizierte Namen.
</p><p>Das folgende Beispiel zeigt ein <a href="Hallo-Welt-Programm" title="Hallo-Welt-Programm">Hallo-Welt-Programm</a> in Java.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">org.wikipedia</span><span class="p">;</span>

<span class="kn">import static</span><span class="w"> </span><span class="nn">java.lang.System.out</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HalloWelt</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">arguments</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hallo Welt."</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>

<span class="p">}</span>
</pre></div>
<p>In diesem Beispiel wird eine Klasse „<code>HalloWelt</code>“ definiert, die dem Paket „<code>org.wikipedia</code>“ angehört. Per Konvention orientieren sich die Paketnamen in Java an den <a href="Dom%C3%A4ne_(Internet)" class="mw-redirect" title="Domäne (Internet)">Internet-Domänen</a> ihrer Entwickler, in diesem Fall also „<code>org.wikipedia</code>“ für die Domäne „<code>wikipedia.org</code>“. Die Richtung des Namens wird umgedreht, weil bei Internet-Domänen der Name der äußersten Einheit hinten steht, während er in Java vorne steht. Das Paket „<code>org.wikipedia</code>“ befindet sich also „innerhalb“ des Pakets „<code>org</code>“.
</p><p>Eine Import-Anweisung definiert einen einfachen Namen für einen vollqualifizierten Namen. So definiert z.&nbsp;B. die Anweisung „<code>import java.io.File</code>“ den einfachen Namen „<code>File</code>“ für die Klasse, die mit vollem Namen „<code>java.io.File</code>“ heißt.
Neben Imports von Klassen und Schnittstellen können seit Java Version 5 auch statische Felder oder Methoden von Klassen importiert werden. Ein solcher „statischer Import“ wird durch das zusätzliche Schlüsselwort „<code>static</code>“ festgelegt. Im obigen Beispiel wird das statische Feld „<code>out</code>“ der Klasse „<code>java.lang.System</code>“ importiert und anschließend unter dem kurzen Namen „<code>out</code>“ verwendet.
</p><p>Das wichtigste Konstrukt der Programmiersprache Java ist, da sie eine objektorientierte Sprache ist, die <a href="Klasse_(objektorientierte_Programmierung)" class="mw-redirect" title="Klasse (objektorientierte Programmierung)">Klasse</a>. Die <a href="Deklaration_(Programmierung)" title="Deklaration (Programmierung)">Deklaration</a> einer Klasse wird mit dem Schlüsselwort „<code>class</code>“ eingeleitet. Anschließend folgt der Name der Klasse und dann werden – in geschweiften Klammern – die Felder und Methoden der Klasse definiert.
</p><p>Eine Besonderheit von Java stellt die Schnittstelle dar. Eine solche Schnittstelle besteht nur aus Methoden-Deklarationen, deren Implementierung erst von den Klassen festgelegt werden, die sie „implementieren“. Die Deklaration einer Schnittstelle sieht ähnlich aus wie die Deklaration einer Klasse, sie wird jedoch mit dem Schlüsselwort „<code>interface</code>“ eingeleitet.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">package</span><span class="w"> </span><span class="nn">org.wikipedia</span><span class="p">;</span>

<span class="kd">public</span><span class="w"> </span><span class="kd">interface</span> <span class="nc">Article</span><span class="w"> </span><span class="p">{</span>

<span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getName</span><span class="p">();</span>

<span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setContent</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">aContent</span><span class="p">);</span>

<span class="p">}</span>
</pre></div>
<p>Da alle Methoden einer Schnittstelle abstrakt sind, kann das Schlüsselwort „<code>abstract</code>“ bei den einzelnen Methoden entfallen. Ebenso kann das Schlüsselwort „<code>public</code>“ vor den einzelnen Methoden entfallen, weil Methoden einer Schnittstelle immer öffentlich sind.
</p><p>Ab Java 8 kommt die Möglichkeit hinzu, in Schnittstellen statische Methoden sowie „<code>default</code>“-Methoden zu definieren. Darüber hinaus können Schnittstellen mit der Annotation „<code>@FunctionalInterface</code>“ versehen werden, um anzuzeigen, dass es sich bei ihr um eine funktionale Schnittstelle handelt. Eine solche ist dadurch definiert, dass sie genau eine abstrakte Methode deklariert; die Annotation ist nicht dafür erforderlich. Funktionale Schnittstellen können kurz und bündig durch Lambda-Ausdrücke oder Methodenreferenzen implementiert werden.
</p>
<div class="mw-heading mw-heading3"><h3 id="Methoden">Methoden</h3></div>
<p>Das eigentliche Verhalten eines Objekts wird in Methoden definiert. Die <a href="Signatur_(Programmierung)" title="Signatur (Programmierung)">Signatur</a> einer Methode besteht aus ihrem Namen und den Typen ihrer Parameter. Außerdem hat jede Methode einen bestimmten Rückgabetyp oder „<code>void</code>“, wenn sie nichts zurückgibt, und kann eine Reihe von Ausnahmen in einer so genannten „<code>throws</code>“-Klausel definieren.
</p><p><i>Beispiel einer konkreten Methode:</i>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">summe</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">NotANumberException</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">Double</span><span class="p">.</span><span class="na">isNaN</span><span class="p">(</span><span class="n">a</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="n">Double</span><span class="p">.</span><span class="na">isNaN</span><span class="p">(</span><span class="n">b</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">NotANumberException</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<p>Diese Methode erwartet zwei doppelt genaue <a href="Gleitkommazahl" title="Gleitkommazahl">Gleitkommazahlen</a> als Parameter und gibt die Summe der beiden ebenfalls als Gleitkommazahl zurück. Falls eine der beiden Zahlen keine gültige Gleitkommazahl ist, wirft die Methode eine Ausnahme namens „<code>NotANumberException</code>“.
</p><p><i>Beispiel einer abstrakten Methode:</i>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="nf">summe</span><span class="p">(</span><span class="kt">double</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="kt">double</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">NotANumberException</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Attribute">Attribute</h3></div>
<p><a href="Attribut_(UML)" title="Attribut (UML)">Attribute</a> sind Variablen, die zu einem Objekt gehören. Sie sind durch einen Typ und einen Namen definiert und können wahlweise bereits wenn das Objekt erzeugt wird initialisiert werden.
</p><p><i>Beispiel einer Variablendeklaration ohne Initialisierung:</i>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">private</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">;</span>
</pre></div>
<p>Klassenvariablen werden als statische Attribute deklariert. Diese Attribute existieren nicht einmal pro Objekt, sondern nur einmal pro Klasse. Das Schlüsselwort „<code>final</code>“ verhindert, dass eine Variable nach ihrer Initialisierung ihren Wert ändert. Es wird zum Beispiel verwendet, um Konstanten zu definieren.
</p><p><i>Beispiel einer statischen und finalen Klassenvariablendeklaration mit Initialisierung:</i>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">X</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">;</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Felder">Felder</h3></div>
<p>In der <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Programmiersprache Java</a> ist ein <a href="Feld_(Datentyp)" class="mw-redirect" title="Feld (Datentyp)">Feld</a> (englisch <i>Array</i>) ein eigenständiges Objekt. Dieses kann Daten eines bei der Deklaration festgelegten Typs aufnehmen. Der Speicher wird erst bei der Initialisierung des Feldes belegt. Dazu muss eine Länge (englisch <i>Size</i>) angegeben werden, die beschreibt wie viele Elemente eines Typs das Feld besitzen soll. Die Größe eines Arrays ist fix und kann nach der Instanziierung nicht mehr geändert werden. In Java wird ein Feld immer mit einem positiven Integer indiziert. Dadurch beschränkt sich die mögliche Länge eines Arrays auf 0 bis 2<sup>31</sup> − 1.
</p><p>Die einzelnen Elemente eines Feldes werden – analog zu den Attributen anderer Objekte – bei der Instanziierung des Feldes mit dem Nullwert des jeweiligen Feld-Grundtyps initialisiert. Für Felder von numerischen Primitivtypen ist dies 0 bzw. 0.0, für ein Feld mit dem Grundtyp boolean ist es der Wert <code>false</code>, für Felder von Objektreferenzen die leere Referenz <code>null</code>. Bei der Erzeugung eines Feldes von Objektreferenzen werden also außer dem Feld selbst noch keine Objekte erzeugt.
</p><p>Echte mehrdimensionale Felder gibt es in Java nicht. Dennoch ist es möglich, mehrdimensionale Felder zu erstellen, indem Felder in Feldern verschachtelt werden. Im Falle eines zweidimensionalen Feldes wird hier zunächst ein Feld erstellt, welches Referenzen auf Felder des gewünschten Typs aufnehmen kann. Anschließend wird jedem Platz dieses Feldes eine Referenz auf ein eindimensionales Feld des gewünschten Grundtyps zugewiesen.
</p>
<div class="mw-heading mw-heading4"><h4 id="Eindimensionales_Feld">Eindimensionales Feld</h4></div>
<p><b>Deklaration</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;[]</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">;</span><span class="w"> </span><span class="c1">// Deklaration</span>
<span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;[]</span><span class="p">;</span><span class="w"> </span><span class="c1">// Alternative Deklaration (seltener verwendet)</span>
</pre></div>
<p>Bei der Deklaration wird der Datentyp des Feldes festgelegt. Dabei wird jedoch kein Feld allokiert, sondern wie bei allen anderen Objekten nur eine Referenz eines Types definiert, der ein Feld zugewiesen werden kann.
</p><p><b>Instanziierung</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;[&lt;</span><span class="n">Anzahl</span><span class="o">&gt;]</span><span class="p">;</span><span class="w"> </span><span class="c1">// Instanziierung eines eindimensionalen Feldes</span>
</pre></div>
<p>Bei der <a href="Objekt_(Programmierung)#Instanziierung" title="Objekt (Programmierung)">Instanziierung</a> eines eindimensionalen Feldes muss sowohl dessen Datentyp als auch die Anzahl der Elemente bekannt sein. Wie bereits am Anfang angemerkt ist die Länge eines Feldes auf nichtnegative ganzzahlige Werte beschränkt. Das Schlüsselwort <code>new</code> hat hier dieselbe Bedeutung wie bei allen anderen Objekten und legt eine Instanz des Typs an. Dabei wird der benötigte Speicher für das Objekt als auch für dessen Elemente reserviert. Im Gegensatz zu anderen Objekten verfügen Felder aber über keine Konstruktoren und es ist nicht möglich, durch explizite Ableitung Subtypen eines Feldtyps zu bilden.
</p><p><b>Beispiel eines eindimensionalen Feldes des Typs <i>int</i> der Länge 3</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">feld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// auf der linken Seite wird die Objektreferenz deklariert</span>
<span class="w"> </span><span class="c1">// auf der rechten Seite wird das Feld initialisiert</span>
</pre></div>
<p>Die Deklaration und Instanziierung muss nicht getrennt voneinander erfolgen, sondern kann wie üblich auch als eine Anweisung geschrieben werden. Beim Zugriff auf die Elemente ist zu beachten, dass Java mit dem Index 0 anfängt zu zählen. So wird in diesem Beispiel mit Index 0 auf das erste Element zugegriffen und mit Index 2 auf das letzte Element.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">feld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">}</span>
</pre></div>
<p>ist eine Verkürzung von
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">feld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">int</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">0</span><span class="o">]=</span><span class="mi">1</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">1</span><span class="o">]=</span><span class="mi">2</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">2</span><span class="o">]=</span><span class="mi">3</span><span class="p">;</span>
</pre></div>
<p><b>Auslesen von Werten</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// das Auslesen erfolgt durch Angabe des Index</span>
<span class="n">objekt</span><span class="p">.</span><span class="na">methode</span><span class="p">(</span><span class="n">feld</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="p">);</span><span class="w"> </span><span class="c1">// Einzelwerte eines Feldes können wie Variablen des gleichen Typs verwendet werden</span>
<span class="kt">int</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// würde in diesem Beispiel eine IndexOutOfBoundsException auslösen, da es kein 4. Element gibt</span>
</pre></div>
<p><b>Zuweisung von Werten</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">feld</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="c1">// Java ist "nullbasiert"</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="mf">2.7</span><span class="p">;</span><span class="w"> </span><span class="c1">// bei Zuweisungen muss wie bei normalen Variablen der Typ angepasst werden</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="c1">// die Indexierung läuft immer bis n-1</span>
</pre></div>
<p><b> Länge eines Feldes</b>
Viele Algorithmen benötigen die Länge eines Feldes, etwa um alle Einträge abzuarbeiten. Die Länge eines Feldes ist zur Laufzeit bekannt und kann über die Objektvariable <code>length</code> abgefragt werden, die selbst vom Typ <code>int</code> ist. Diese Variable ist stets konstant und kann nicht geändert werden. Eine Zuweisung eines anderen Wertes ist also nicht möglich.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">len</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="c1">// Liest die Länge des Feldes aus und speichert sie in der Variablen len</span>
<span class="n">feld</span><span class="p">.</span><span class="na">length</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="c1">// diese Zuweisung würde einen Fehler beim Kompilieren ergeben, da sie nicht zulässig ist</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Mehrdimensionale_Felder">Mehrdimensionale Felder</h4></div>

<p>Wie bereits angemerkt, kennt Java keine mehrdimensionalen Felder. Dennoch können Felder ineinander verschachtelt werden, um so eine analoge Struktur zu erhalten. Ein zweidimensionales Feld ist dabei mit einer Tabelle vergleichbar, wobei das erste (äußere) indizierende Feld auf die Zeile verweisen würde. Die Zeile selbst ist wiederum ein Feld, dessen Indizes auf die Spalte der Zeile, also auf den entsprechenden Eintrag, verweist, wie es auch in der Abbildung ersichtlich ist.
</p><p>In Java können mehrdimensionale Felder durch die Angabe mehrerer eckiger Klammerpaare <code>[]</code> realisiert werden, wobei jedes Paar für eine weitere Dimension des Feldes steht. Das äußere Feld, welches das nächstinnere indiziert, steht dabei auf der linken Seite, bzw. ist das Klammerpaar, das als erstes definiert wurde. Dies ist am Beispiel eines Bildes ersichtlich, das üblicherweise mit <code>[y][x]</code> indiziert werden würde, wobei hier zunächst die Zeile (y) ermittelt wird und anschließend die Spalte (x) aus der Zeile.
</p><p><b>Beispiel der Erstellung eines zweidimensionalen Feldes</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">double</span><span class="o">[][]</span><span class="w"> </span><span class="n">feld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">double</span><span class="o">[</span><span class="n">zeilen</span><span class="o">][</span><span class="n">spalten</span><span class="o">]</span><span class="p">;</span>
</pre></div>
<p>Bei diesem Beispiel ist zu beachten, dass nicht nur das äußere Feld (hier <i>feld</i> genannt) allokiert wird, sondern auch die Felder für die „Zeilen“. Sie sind also nicht <i>null</i> und wurden ebenfalls mit angelegt. Ihre Einträge werden, wie von einem eindimensionalen Feld zu erwarten, mit <i>0</i> initialisiert.
</p><p>In einer <a href="Matrix_(Mathematik)" title="Matrix (Mathematik)">Matrix</a> werden die waagrechten Felder als Zeilen, die Senkrechten als Spalten bezeichnet. Ein einzelnes Element ist durch den jeweiligen Zeilen- und Spaltenindex eindeutig bestimmt. Die Syntax für eine Matrix oder allgemein für mehrdimensionale Felder ist fast identisch. Der Unterschied liegt in der Anzahl der geschlossenen eckigen Klammern, die Auskunft darüber geben, wie viele Dimensionen das Feld haben wird.
</p><p><b>Beispiel der Erstellung eines zweidimensionalen Feldes mit unterschiedlichen Größen in den „Unterfeldern“</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">double</span><span class="o">[][]</span><span class="w"> </span><span class="n">feld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">double</span><span class="o">[</span><span class="mi">3</span><span class="o">][]</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">0</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">double</span><span class="o">[</span><span class="mi">3</span><span class="o">]</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">double</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="p">;</span>
<span class="n">feld</span><span class="o">[</span><span class="mi">2</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">double</span><span class="o">[</span><span class="mi">1</span><span class="o">]</span><span class="p">;</span>
</pre></div>
<p>Bei diesem Beispiel ist zu beachten, dass im ersten Befehl nur das äußere Feld (hier <i>feld</i> genannt) allokiert wird und die einzelnen Elemente mit <i>null</i> initialisiert werden. In den folgenden Befehlen werden diesen Elementen dann die „Unterfelder“ zugewiesen, es ergibt sich hier ein „dreieckiges“ Feld.
</p><p>Wie bei eindimensionalen Arrays gibt es auch bei mehrdimensionalen Arrays eine verkürzte Variante:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[][]</span><span class="w"> </span><span class="n">array2D</span><span class="o">=</span><span class="p">{{</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">},{</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">}};</span>
<span class="c1">//Entspricht "=new int[2][3];" mit den darauf folgenden Zuweisungen</span>
<span class="c1">//"array2D[0][0]=1;"</span>
<span class="c1">//"array2D[0][1]=2;"</span>
<span class="c1">//(...)</span>
<span class="c1">//"array2D[1][2]=6;"</span>
</pre></div>
<p>Wo die eckigen Klammern ([]) gesetzt werden, bleibt dem Programmierer überlassen:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[][]</span><span class="w"> </span><span class="n">A</span>
</pre></div>
<p>ist das Gleiche wie
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">A</span><span class="o">[][]</span>
</pre></div>
<p>oder auch
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="o">[]</span><span class="w"> </span><span class="n">A</span><span class="o">[]</span>
</pre></div>
<p><b>Allgemeine Syntax</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">[]</span><span class="err">…</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Feldvariable</span><span class="o">&gt;</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">[&lt;</span><span class="n">Anzahl</span><span class="o">&gt;]</span><span class="err">…</span><span class="w"> </span><span class="p">;</span>
</pre></div>
<p>Die <a href="Auslassungspunkte" title="Auslassungspunkte">Auslassungspunkte</a> ‘…’ stehen hier stellvertretend für weitere Klammerpaare, die jeweils eine weitere Dimension erzeugen. Der Zugriff auf die Elemente erfolgt analog zu denen eines eindimensionalen Feldes. Dabei ist jedoch zu beachten, dass auch auf das jeweilige äußere Feld zugegriffen werden kann, um z. B. die Anzahl der Zeilen zu bestimmen. Ausgehend vom Beispiel eines zweidimensionalen Feldes kann die Anzahl wie folgt bestimmt werden.
</p><p><b>Auslesen und zuweisen von Werten</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">double</span><span class="w"> </span><span class="n">wert</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="o">[</span><span class="n">y</span><span class="o">][</span><span class="n">x</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// liefert den Wert des Feldes x,y</span>
<span class="n">feld</span><span class="o">[</span><span class="n">y</span><span class="o">][</span><span class="n">x</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">wert</span><span class="p">;</span><span class="w"> </span><span class="c1">// weist dem Feld x,y einen Wert zu</span>
</pre></div>
<p><b>Bestimmung der Länge des Feldes und der Unterfelder</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">zeilenanzahl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="c1">// weist der Variable "zeilenanzahl" den Wert von "feld.length" zu</span>
</pre></div>
<p>Die Länge der Unterfelder kann über den Index des Feldes bestimmt werden.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">spaltenanzahl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="c1">// weist der Variable "spaltenanzahl" den Wert von "feld[index].length" zu</span>
</pre></div>
<p>In Langform, bzw. nach einzelnen Schritten aufgelöst, würde dies wie folgt aussehen. Daraus wird ebenfalls ersichtlich, dass es sich bei den Zeilen um Objekte – eindimensionale Felder – handelt.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">double</span><span class="o">[]</span><span class="w"> </span><span class="n">zeilenfeld</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">feld</span><span class="o">[</span><span class="n">index</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// ermittelt das erste "Unterfeld" mit gegebenen Index</span>
<span class="kt">int</span><span class="w"> </span><span class="n">spaltenanzahl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">zeilenfeld</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="c1">// weist der Variable "spaltenanzahl" den Wert von "zeilenfeld.length" zu</span>
</pre></div>
<p><br>
</p>
<div class="mw-heading mw-heading3"><h3 id="Anweisungen_und_Kontrollstrukturen">Anweisungen und Kontrollstrukturen</h3></div>

<p>Java unterstützt die üblichen Anweisungen, die auch aus anderen imperativen Programmiersprachen bekannt sind. Einfache Anweisungen werden mit <a href="Semikolon" title="Semikolon">Semikolon</a> abgeschlossen. Mehrere Anweisungen können mit geschweiften Klammern zu einem Anweisungsblock zusammengefasst werden. Kontrollstrukturen werden ebenfalls wie Blöcke behandelt und müssen (bis auf eine Ausnahme) daher nicht mit einem Semikolon abgeschlossen werden.
</p><p>Als <a href="Kontrollstruktur" title="Kontrollstruktur">Kontrollstrukturen</a> stehen die <i><a href="Bedingte_Anweisung_und_Verzweigung" title="Bedingte Anweisung und Verzweigung">Bedingte Anweisung und Verzweigung</a></i> und <i><a href="Case-Anweisung" class="mw-redirect" title="Case-Anweisung">Case-Anweisung</a></i>, sowie die <i><a href="While-Schleife" class="mw-redirect" title="While-Schleife">While</a></i>-, <i><a href="Do-while-Schleife" class="mw-redirect" title="Do-while-Schleife">Do-while</a></i>- und <i><a href="For-Schleife" title="For-Schleife">For</a></i>-Schleife und ihre verschiedenen Ausprägungen zur Verfügung.
</p>
<div class="mw-heading mw-heading4"><h4 id="Bedingte_Anweisung_und_Verzweigung">Bedingte Anweisung und Verzweigung</h4></div>


<p>Die <a href="Bedingte_Anweisung_und_Verzweigung" title="Bedingte Anweisung und Verzweigung">Bedingte Anweisung und Verzweigung</a>, im Folgenden <i>If-Anweisung</i> genannt, ermöglicht es Anweisungen unter Voraussetzung einer bestimmten Bedingung ausführen zu lassen. Dazu wird das Schlüsselwort „if“ verwendet. Dahinter folgt ein Paar von runden Klammern, in dem die Bedingung definiert werden kann. Die Bedingung ist ein Ausdruck der als Ergebnis einen booleschen Wert (<i>true</i> oder <i>false</i>) liefern muss. Dies unterscheidet Java von anderen Sprachen wie etwa C, bei denen auch andere Werte als Bedingung erlaubt sind. Weiterhin ist anzumerken, dass das häufig anzutreffende Schlüsselwort „then“ nicht existiert.
</p><p>Das Schlüsselwort „else“ kann verwendet werden um eine Anweisung im Falle des Nichtzutreffens der Bedingung auszuführen. Es ist optional und in diesem Fall spricht man von einer Verzweigung, da entweder die erste oder die zweite Anweisung ausgeführt wird. Alternativ kann anstatt „else“ ein „else if“ verwendet werden, das wie ersteres „if“ eine weitere Bedingung erwartet. Dadurch ist möglich Kaskaden von Verzweigungen aufzubauen. Ohne Strukturierung durch Blöcke (geschweifte Klammern) besteht jedoch die Gefahr eines <a href="Dangling_else" title="Dangling else">Dangling else</a>, bei dem nicht eindeutig ist, welcher If-Anweisung der Else-Zweig zuzuordnen ist.
</p><p><b>Allgemeine Syntax</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">&lt;</span><span class="n">Bedingung</span><span class="o">&gt;</span><span class="p">)</span>
<span class="w"> </span><span class="o">&lt;</span><span class="n">Anweisung</span><span class="o">&gt;</span><span class="p">;</span>
<span class="k">else</span>
<span class="w"> </span><span class="o">&lt;</span><span class="n">Anweisung</span><span class="o">&gt;</span><span class="p">;</span>
</pre></div>
<p><b>Beispiel für eine einfache If-Anweisung mit einem Block von zwei Ausgaben</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">print</span><span class="p">(</span><span class="s">"Die Zahl ist negativ"</span><span class="p">);</span><span class="w"> </span><span class="c1">// Bedingte Ausgabe</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">();</span><span class="w"> </span><span class="c1">// Zeilenumbruch auf der Konsole</span>
<span class="p">}</span>
</pre></div>
<p><b>Komplexeres Beispiel</b>
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Die Zahl ist negativ"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Die Zahl ist Null"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">5</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Die Zahl ist kleiner als 5"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">print</span><span class="p">(</span><span class="s">"Die Zahl ist größer oder gleich 5"</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Der_Ternäre_Operator"><span id="Der_Tern.C3.A4re_Operator"></span>Der Ternäre Operator</h4></div>
<p>Für eine einfache If-Anweisung existiert eine zusätzliche Kurzschreibweise. Diese kann innerhalb eines Ausdrucks verwendet werden, ist aber auf ein „Entweder-oder“ beschränkt. D.&nbsp;h. sie muss in jedem Fall einen konkreten Wert zurückliefern. Der Operator selbst ist das Fragezeichen ‘?’ vor dem ein boolescher Ausdruck stehen muss. Hinter dem Fragezeichen folgt der Rückgabewert für den Fall, dass der boolesche Ausdruck wahr (true) ist. Anschließend folgt ein Doppelpunkt ‘:’ nach dem wiederum der Rückgabewert folgen muss, falls der boolesche Ausdruck nicht wahr (false) ist.
</p><p><b>Syntax</b>
</p>
<dl><dd></dd></dl>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="o">&lt;</span><span class="n">Bedingung</span><span class="o">&gt;</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Ausdruck</span><span class="o">&gt;</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Ausdruck</span><span class="o">&gt;</span>
</pre></div>
<p><b>Beispiel</b>
</p>
<dl><dd></dd></dl>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="o">?</span><span class="w"> </span><span class="o">-</span><span class="n">i</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">i</span><span class="p">;</span><span class="w"> </span><span class="c1">// kehrt vor der Zuweisung an a das Vorzeichen von i um, wenn i negativ ist (Betrag von i)</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Switch-Anweisung">Switch-Anweisung</h4></div>

<ul><li>Eine Fallunterscheidung, wobei der Ausdruck ein Zeichen, eine Ganzzahl, eine Zeichenkette oder ein Aufzählungstyp sein kann.</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">switch</span><span class="w"> </span><span class="p">(</span><span class="err">''</span><span class="n">Ausdruck</span><span class="err">''</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="err">''</span><span class="n">Konstante1</span><span class="err">''</span><span class="p">:</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung1</span><span class="err">''</span><span class="p">;</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">case</span><span class="w"> </span><span class="err">''</span><span class="n">Konstante2</span><span class="err">''</span><span class="p">:</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung2</span><span class="err">''</span><span class="p">;</span><span class="w"> </span><span class="k">break</span><span class="p">;</span>
<span class="w"> </span><span class="k">default</span><span class="p">:</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung3</span><span class="err">''</span><span class="p">;</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading4"><h4 id="Schleifen">Schleifen</h4></div>
<p>Java unterscheidet vier verschiedene Arten von <a href="Schleife_(Programmierung)" title="Schleife (Programmierung)">Schleifen</a>.
</p>
<ul class="center gallery mw-gallery-traditional">
<li class="gallerybox" style="width: 185px">
<div class="thumb" style="width: 180px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext">Struktogramm: While-Schleife</div>
</li>
<li class="gallerybox" style="width: 185px">
<div class="thumb" style="width: 180px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext">Struktogramm: Do-while-Schleife</div>
</li>
<li class="gallerybox" style="width: 185px">
<div class="thumb" style="width: 180px; height: 150px;"><span typeof="mw:File"></span></div>
<div class="gallerytext">Struktogramm: For-Schleife</div>
</li>
</ul>
<ul><li>Wiederhole eine Anweisung solange die Bedingung wahr ist, wobei die Bedingung vor der Anweisung geprüft wird (<a href="While-Schleife" class="mw-redirect" title="While-Schleife">While-Schleife</a>).</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="err">''</span><span class="n">Bedingung</span><span class="err">''</span><span class="p">)</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung</span><span class="err">''</span><span class="p">;</span>
</pre></div>
<ul><li>Wiederholung einer Anweisung solange die Bedingung wahr ist, wobei die Bedingung erst nach der Ausführung geprüft wird (<a href="Do-while-Schleife" class="mw-redirect" title="Do-while-Schleife">Do-while-Schleife</a>).</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">do</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung</span><span class="err">''</span><span class="p">;</span><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="err">''</span><span class="n">Bedingung</span><span class="err">''</span><span class="p">);</span>
</pre></div>
<ul><li>Initialisiert einen Wert, wiederholt die Anweisung solange die Bedingung wahr ist und führt eine zweite Anweisung nach jedem Schleifendurchlauf aus (<a href="For-Schleife" title="For-Schleife">For-Schleife</a>).</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="err">''</span><span class="n">Initialisierung</span><span class="err">''</span><span class="p">;</span><span class="w"> </span><span class="err">''</span><span class="n">Bedingung</span><span class="err">''</span><span class="p">;</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung2</span><span class="err">''</span><span class="p">)</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung1</span><span class="err">''</span><span class="p">;</span>
</pre></div>
<ul><li>Zudem existiert eine erweiterte For-Schleife, auch Foreach-Schleife genannt, die es erlaubt, für jedes Element eines iterierbaren Objektes (<a href="Feld_(Datentyp)" class="mw-redirect" title="Feld (Datentyp)">Reihungen</a>, <a href="Liste_(Datenstruktur)" title="Liste (Datenstruktur)">Listen</a> etc.) Anweisungen auszuführen.</li></ul>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="err">''</span><span class="n">Element</span><span class="err">''</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="err">''</span><span class="n">Kollektion</span><span class="err">''</span><span class="p">)</span><span class="w"> </span><span class="err">''</span><span class="n">Anweisung</span><span class="err">''</span><span class="p">;</span>
</pre></div>
<p>Die nachfolgenden Beispiele zeigen den Einsatz einer solchen erweiterten For-Schleife, einmal angewendet auf den Basisdatentyp <a href="#Primitive_Datentypen"><code>char</code></a> und einmal auf eine Liste.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">char</span><span class="o">[]</span><span class="w"> </span><span class="n">chars</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="kt">char</span><span class="o">[]</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="sc">'a'</span><span class="p">,</span><span class="w"> </span><span class="sc">'b'</span><span class="p">,</span><span class="w"> </span><span class="sc">'c'</span><span class="w"> </span><span class="p">};</span><span class="w"> </span><span class="c1">// neues Zeichen-Array anlegen</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">char</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">chars</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Zeichen: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">c</span><span class="p">);</span><span class="w"> </span><span class="c1">// Jedes Zeichen auf die Konsole schreiben.</span>
<span class="p">}</span>

<span class="n">List</span><span class="o">&lt;</span><span class="n">Character</span><span class="o">&gt;</span><span class="w"> </span><span class="n">charlist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">&lt;</span><span class="n">Character</span><span class="o">&gt;</span><span class="p">();</span><span class="w"> </span><span class="c1">// neue Zeichen-Liste anlegen</span>
<span class="n">charlist</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="sc">'a'</span><span class="p">);</span><span class="w"> </span><span class="c1">// Werte hinzufügen (mit Autoboxing)</span>
<span class="n">charlist</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="sc">'b'</span><span class="p">);</span>
<span class="n">charlist</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="sc">'c'</span><span class="p">);</span>
<span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">Character</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">charlist</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Zeichen: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">c</span><span class="p">);</span><span class="w"> </span><span class="c1">// Jedes Zeichen auf die Konsole schreiben.</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Ausdrücke"><span id="Ausdr.C3.BCcke"></span>Ausdrücke</h3></div>
<p>Im Gegensatz zu anderen Programmiersprachen, wie beispielsweise <a href="C_(Programmiersprache)" title="C (Programmiersprache)">C</a>, ist die Reihenfolge der Auswertung von Ausdrücken in Java bereits in der Sprachdefinition festgelegt: Binäre infix-Operatoren gleichen <a href="Operatorrangfolge" title="Operatorrangfolge">Rangs</a>, die keine Zuweisungsoperatoren sind, werden immer von links nach rechts ausgewertet. Außerdem gilt – wie in C auch – dass die Auswertung von logischen Ausdrücken verkürzt werden kann, wenn das Ergebnis bereits feststeht. Im folgenden Beispiel wird also garantiert zuerst überprüft, ob „<code>objekt</code>“ nicht „<code>null</code>“ ist. Ist dieser Teilausdruck <i>false</i> (also <code>objekt</code> ist eine Nullreferenz), wird der rechte Operand von <code>&amp;&amp;</code> gar nicht ausgewertet, d.&nbsp;h. die Methode <code>inOrdnung()</code> wird nicht gesucht oder gar gerufen. Somit ist der Gesamtausdruck sicher und kann niemals eine „<code>NullPointerException</code>“ verursachen. (Eine „<code>NullPointerException</code>“ wird in Java immer dann geworfen, wenn versucht wird, die Objektreferenz „<code>null</code>“ aufzulösen.)
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">objekt</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="kc">null</span><span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">objekt</span><span class="p">.</span><span class="na">inOrdnung</span><span class="p">())</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"in Ordnung"</span><span class="p">);</span>
<span class="p">}</span>
<span class="k">else</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"ungeprüft oder Prüfung misslungen"</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<p>Werden statt der logischen Operatoren <code>&amp;&amp;</code> und <code>||</code> die Bit-Operatoren <code>&amp;</code> und <code>|</code> verwendet, so müssen beide Teilergebnisse bitweise verknüpft werden und die Verarbeitung kann nicht beim linken Ausdruck abbrechen, falls der <code>false</code> ist. Hat also die Variable <code>objekt</code> den Wert <code>null</code>, so versucht die Java-VM, den aus dem ersten Ausdruck resultierenden Wert <code>false</code> mit dem Ergebnis des zweiten Ausdrucks bitweise zu verknüpfen. Um den zweiten Ausdruck zu berechnen, versucht die VM <code>objekt</code> zu dereferenzieren und wirft eine <code>NullPointerException</code>.
</p>
<div class="mw-heading mw-heading4"><h4 id="Funktionale_Schnittstellen_und_Lambda-Ausdrücke"><span id="Funktionale_Schnittstellen_und_Lambda-Ausdr.C3.BCcke"></span>Funktionale Schnittstellen und Lambda-Ausdrücke</h4></div>
<p>Ein Lambda-Ausdruck ist eine namenlose (anonyme) Methode, die (als Objekt) weitergegeben werden kann. Lambda-Ausdrücke beschreiben also Funktionsobjekte. Der Begriff geht auf den <a href="Lambda-Kalk%C3%BCl" title="Lambda-Kalkül">Lambda-Kalkül</a> zurück, eine <a href="Formale_Sprache" title="Formale Sprache">formale Sprache</a> zur Untersuchung von <a href="Funktion_(Mathematik)" title="Funktion (Mathematik)">Funktionen</a> (siehe auch <a href="Funktionale_Programmierung" title="Funktionale Programmierung">funktionale Programmierung</a>). Lambda-Ausdrücke in Java gibt es seit Java 8 und umfassen Parameterlisten, einen Rückgabetyp und einen Body:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">,...,</span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Anweisungsblock</span><span class="o">&gt;</span>
<span class="p">(</span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">,...,</span><span class="o">&lt;</span><span class="n">Datentyp</span><span class="o">&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Ausdruck</span><span class="o">&gt;</span>
<span class="p">(</span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">,...,</span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Anweisungsblock</span><span class="o">&gt;</span>
<span class="p">(</span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">,...,</span><span class="o">&lt;</span><span class="n">Variablenbezeichner</span><span class="o">&gt;</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="o">&lt;</span><span class="n">Ausdruck</span><span class="o">&gt;</span>
</pre></div>
<p>Die runden Klammern können weggelassen werden, wenn die Anzahl der enthaltenen Elemente genau eins ist. Die Angabe der Parametertypen ist nur dann erforderlich, wenn der Compiler sie nicht selbst aus dem Kontext des Ausdrucks ableiten kann.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> Eine Funktion, die die Summe von zwei Argumenten liefert, lässt sich folgendermaßen ausdrücken:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="n">j</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">i</span><span class="o">+</span><span class="n">j</span>
</pre></div>
<p>Sie haben selbst keinen konkreten Typ und können daher nur in einem Kontext verwendet werden, der einen Typ vorgibt, etwa Methodenaufrufe, Return-Anweisungen und Variableninitialisierungen. Der vorgegebene Typ muss eine funktionale Schnittstelle sein. In folgendem Beispiel ist ein <code>Comparator&lt;String&gt;</code>-Objekt mit Hilfe eines Lambda-Ausdrucks definiert. Der <code>sort</code>-Aufruf bewirkt die Sortierung von <code>someStrings</code> nach deren Länge, in absteigender Reihenfolge.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="n">List</span><span class="o">&lt;</span><span class="n">String</span><span class="o">&gt;</span><span class="w"> </span><span class="n">someStrings</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">...</span>
<span class="n">Collections</span><span class="p">.</span><span class="na">sort</span><span class="p">(</span><span class="n">someStrings</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="n">y</span><span class="p">.</span><span class="na">length</span><span class="p">()</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">x</span><span class="p">.</span><span class="na">length</span><span class="p">());</span>
</pre></div>
<p>Lambda-Ausdrücke helfen, die oft schlecht lesbaren, langen Deklarationen innerer, anonymer Klassen, zu vermeiden.
</p><p>In Java heißen Schnittstellen, die nur über eine Operation (abstrakte Methode) verfügen, <i>funktionale Schnittstellen</i>. Eine abstrakte Klasse mit genau einer abstrakten Methode zählt allerdings <i>nicht</i> als funktionale Schnittstelle.
</p><p>Methodenreferenzen stellen ebenfalls eine ab Java 8 verfügbare Möglichkeit dar, funktionale Schnittstellen zu implementieren. Sie haben eine der Formen
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="o">&lt;</span><span class="n">Klassenreferenz</span><span class="o">&gt;</span><span class="p">::</span><span class="o">&lt;</span><span class="n">Methodenbezeichner</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="n">Ausdruck</span><span class="o">&gt;</span><span class="p">::</span><span class="o">&lt;</span><span class="n">Methodenbezeichner</span><span class="o">&gt;</span>
</pre></div>
<p>In folgendem Code wird die Methodenreferenz <code>System.out::println</code> als ein <code>java.util.function.Consumer&lt;String&gt;</code>-Objekt verwendet.
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">static</span><span class="w"> </span><span class="o">&lt;</span><span class="n">A</span><span class="o">&gt;</span><span class="w"> </span><span class="n">Consumer</span><span class="o">&lt;</span><span class="n">A</span><span class="o">&gt;</span><span class="w"> </span><span class="nf">doTwice</span><span class="p">(</span><span class="n">Consumer</span><span class="o">&lt;</span><span class="n">A</span><span class="o">&gt;</span><span class="w"> </span><span class="n">consumer</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">-&gt;</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">consumer</span><span class="p">.</span><span class="na">accept</span><span class="p">(</span><span class="n">a</span><span class="p">);</span>
<span class="w"> </span><span class="n">consumer</span><span class="p">.</span><span class="na">accept</span><span class="p">(</span><span class="n">a</span><span class="p">);</span>
<span class="w"> </span><span class="p">};</span>
<span class="p">}</span>
<span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">foo</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">doTwice</span><span class="p">(</span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">::</span><span class="n">println</span><span class="p">).</span><span class="na">accept</span><span class="p">(</span><span class="s">"Hello"</span><span class="p">);</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Kommentare">Kommentare</h3></div>
<p><a href="Kommentar_(Programmierung)" title="Kommentar (Programmierung)">Kommentare</a> sind Teile des Quellcodes, welche Informationen für den menschlichen Leser enthalten und vom Computer bei der Weiterverarbeitung ignoriert werden.
</p><p>Man unterscheidet zwischen Zeilenkommentare und Blockkommentare. Der Zeilenkommentar folgt an einer Zeile. Die Syntax besteht aus einem Doppelschrägstrich. Der Blockkommentar umfasst die Beschreibung mehrerer Zeilen. Die Syntax dafür besteht aus einem Schrägstrich und darauf folgendes Mal-Zeichen. Mit dem Mal-Zeichen und dem Schrägstrich wird der Kommentar geschlossen. Beim Kompilieren werden die Kommentare vom Compiler ignoriert.
</p><p>Beispiel:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">10</span><span class="p">;</span><span class="w"> </span><span class="c1">// Zeilenkommentar: hier bekommt die Variable i den Wert 10 zugewiesen.</span>
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>

<span class="cm">/* Blockkommentar: hier beginnt eine While-Schleife</span>
<span class="cm">....</span>
<span class="cm">j wird um Eins erhöht, solange j kleiner i ist.*/</span>
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">j</span><span class="o">++</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
<p>Zur Dokumentation ganzer Methoden oder Klassen wird oft das <a href="Javadoc" title="Javadoc">Javadoc</a>-System verwendet.
</p>
<div class="mw-heading mw-heading3"><h3 id="Generische_Programmierung">Generische Programmierung</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→&nbsp;</span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Generische_Programmierung_in_Java" title="Generische Programmierung in Java">Generische Programmierung in Java</a></i></div>
<p>Mit Version 5 von Java wurde das Sprachmittel der generischen Programmierung eingeführt.
</p>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite">Scott Stanchfield: <a rel="nofollow" class="external text" href="http://javadude.com/articles/passbyvalue.htm"><i>Java is Pass-by-Value, Dammit!</i></a> JavaDude.com,<span class="Abrufdatum"> abgerufen am 5.&nbsp;November 2010</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava-Syntax&amp;rft.title=Java+is+Pass-by-Value%2C+Dammit%21&amp;rft.description=Java+is+Pass-by-Value%2C+Dammit%21&amp;rft.identifier=http%3A%2F%2Fjavadude.com%2Farticles%2Fpassbyvalue.htm&amp;rft.creator=Scott+Stanchfield&amp;rft.publisher=JavaDude.com&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-sun-reference-value-2"><span class="mw-cite-backlink"><a href="#cite_ref-sun-reference-value_2-0">↑</a></span> <span class="reference-text"><span class="cite"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120309032412/http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.3.1"><i>Types, Values, and Variables.</i></a> In: <i>Java Language Specification.</i> Oracle (Sun), archiviert vom <style data-mw-deduplicate="TemplateStyles:r250917974">
/* start https://de.wikipedia.org/ */


.mw-parser-output .dewiki-iconexternal>a{background-position:center right!important;background-repeat:no-repeat!important}body.skin-minerva .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/OOjs_UI_icon_external-link-ltr-progressive.svg")!important;background-size:10px!important;padding-right:13px!important}body.skin-timeless .mw-parser-output .dewiki-iconexternal>a,body.skin-monobook .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/MediaWiki_external_link_icon.svg")!important;padding-right:13px!important}body.skin-vector .mw-parser-output .dewiki-iconexternal>a{background-image:url("./_mw_/Link.ernal-small-ltr-progressive.svg")!important;background-size:0.857em!important;padding-right:1em!important}


/* end https://de.wikipedia.org/ */
</style><span class="dewiki-iconexternal"><a class="external text" href="https://redirecter.toolforge.org/?url=http%3A%2F%2Fdocs.oracle.com%2Fjavase%2Fspecs%2Fjls%2Fse5.0%2Fhtml%2FtypesValues.html%234.3.1">Original</a></span> (nicht mehr online verfügbar) am <span style="white-space:nowrap;">9.&nbsp;März 2012</span><span>;</span><span class="Abrufdatum"> abgerufen am 6.&nbsp;November 2010</span> (englisch).</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Fde.wikipedia.org%3AJava-Syntax&amp;rft.title=Types%2C+Values%2C+and+Variables&amp;rft.description=Types%2C+Values%2C+and+Variables&amp;rft.identifier=https%3A%2F%2Fweb.archive.org%2Fweb%2F20120309032412%2Fhttp%3A%2F%2Fdocs.oracle.com%2Fjavase%2Fspecs%2Fjls%2Fse5.0%2Fhtml%2FtypesValues.html%234.3.1&amp;rft.publisher=Oracle+%28Sun%29&amp;rft.source=http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.3.1&amp;rft.language=en">&nbsp;</span></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text">Martin Gerlach: <a rel="nofollow" class="external text" href="http://blog.neofonie.de/java/java-8-neuheiten-lambda-ausdruecke-und-default-methoden">Java SE 8 Neuerungen (Teil 1): Lambda-Ausdrücke und Default-Methoden</a> In: <a rel="nofollow" class="external text" href="http://blog.neofonie.de/">Neo Tech Blog</a> (erstellt am 17. November 2014, abgerufen am 16. Dezember 2016).</span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-05-25" href="https://de.wikipedia.org/wiki/?title=Java-Syntax&amp;oldid=256319345">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>